package cn.tedu.collection;

import java.util.*;

/**本类用于测试map接口*/
public class TestMap {
    public static void main(String[] args) {
        /**Map中的数据要符合映射规则,一定注意要同时指定K和V的数据类型
         * 至于K和V指定成什么类型,取决于具体的业务需求*/
        Map<Integer,String> map=new HashMap<>();//需要导包
        map.put(9527,"白骨精");
        map.put(9528,"黑熊精");
        map.put(9529,"鲤鱼精");
        map.put(9530,"黄毛怪");
        map.put(9530,"金角大王");
        map.put(9531,"金角大王");
        /**1.map中存放着的都是无序的数据
         * 2.map中的value可以重复-金角大王
         * 3.map中的key不允许重复,如果重复,后面的value会把前面的value覆盖掉
         * 比如黄毛怪与金角大王都是9530,黄毛怪被覆盖掉了*/
        System.out.println(map);
//        map.clear();清空集合
        System.out.println(map.hashCode());//获取集合哈希码
        System.out.println(map.equals("黄毛怪"));//判断"黄毛怪"是否与集合对象一致
        System.out.println(map.isEmpty());//判断集合是否为空
        System.out.println(map.size());//获取集合中元素个数

        System.out.println(map.containsKey(9527));//true,判断当前map集合中是否包含指定的Key
        //判断当前map集合中是否包含指定的value,因为已被覆盖掉
        System.out.println(map.containsValue("黄毛怪"));//false
        System.out.println(map.get(9530));//根据key值获取到对应的value值
        System.out.println(map.remove(9529));//删除此key值对应的键值对,K与V全部删除
        System.out.println(map.containsValue("鲤鱼精"));
        System.out.println(map.containsKey(9529));
        System.out.println(map);
        //Collection<Type>中Type的类型取决于map中value的类型
        Collection<String> values = map.values();//将map中的value取出来放到集合中
        System.out.println(values);//[白骨精, 黑熊精, 金角大王, 金角大王]
        System.out.println("************");
        //4.map集合的迭代方式
        /**方式一:
         * 遍历map中的数据,但是map本身没有迭代器,所以需要先转换成set集合
         * Set<key>:把map中的所有key值存入到set集合当中--keySet()*/
        Set<Integer> keySet=map.keySet();
        Iterator<Integer> it = keySet.iterator();
        while (it.hasNext()){
            Integer key = it.next();
            String value = map.get(key);
            System.out.println("{"+key+","+value+"}");
        }
        /**方式二:
         * 遍历map集合,需要把map集合先转成set集合
         * 是把map中的一对键值对key&value作为一个Entry<K,V>整体放入set
         * 一对K,V就是一个Entry*/
        System.out.println("****************");
        Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
        Iterator<Map.Entry<Integer, String>> it2 = entrySet.iterator();
        while (it2.hasNext()){
            Map.Entry<Integer, String> entry = it2.next();
            Integer key = entry.getKey();//获取Entry中的Key
            String value = entry.getValue();//获取Entry中的value
            System.out.println("{"+key+","+value+"}");

        }
    }
}
